#ifndef NETLIB_ENDIAN_H
#define NETLIB_ENDIAN_H

// htobe系列函数用于字节序转换，不是posix标准函数，只能用在Linux下

#include <stdint.h>
#include <endian.h>

namespace netlib
{

namespace net
{

namespace sockets
{


#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#pragma GCC diagnostic ignored "-Wold-style-cast"

// 主机字节序转网络字节序-64位
inline uint64_t hostToNetwork64(uint64_t host64) { return htobe64(host64); }

// 主机字节序转网络字节序-32位
inline uint32_t hostToNetwork32(uint32_t host32) { return htobe32(host32); }

// 主机字节序转网络字节序-16位
inline uint16_t hostToNetwork16(uint16_t host16) { return htobe16(host16); }

// 网络字节序转主机字节序-64位
inline uint64_t networkToHost64(uint64_t net64) { return be64toh(net64); }

// 网络字节序转主机字节序-32位
inline uint32_t networkToHost32(uint32_t net32) { return be32toh(net32); }

// 网络字节序转主机字节序-16位
inline uint16_t networkToHost16(uint16_t net16) { return be16toh(net16); }

#pragma GCC diagnostic pop

} // namespace sockets end

} // namespace net end

} // namespace netlib end

#endif